#pragma once


namespace lyz
{
	template<class Iterator, class Ref, class Ptr >
	struct ReverseIterator
	{
		typedef ReverseIterator<Iterator, Ref, Ptr> self;

		
		ReverseIterator(Iterator it)
			:_it(it)
		{

		}
		Iterator _it;
		self& operator++()
		{
			--_it;
			return *this;
		}
		self& operator--()
		{
			++_it;
			return *this;
		}
		Ref operator* ()
		{
			Iterator tmp = _it;
			--tmp;
			return *tmp;
		}

		bool operator!=(const self& s)
		{
			return _it != s._it;
		}


	};
}